int [] id;//宣告陣列名稱為id & 資料型態為int
id = new int[3];//確保陣列能保存的內容數
也可以寫成一行
int [] id = new int[3];
也可以直接指定內容
int [] id = {1,2,3};
或是利用index值填入資料如下:
id[0] = 1;
id[1] = 2;
id[2] = 3;
在陣列的第一個位置填入1,第二個位置填入2,第三個位置填入3
int size = id.length;
此案例的size會等於3
建立Sample2_1.java練習看看
class Sample2_1 {
public static void main(String[] args) {
char[] c; //宣告陣列
c = new char[3]; //作成
int[] i = new int[3]; //一行搞定宣告&作成
String str[] = {"AAA","BBB","CCC"}; //宣告、作成並賦值。
c[0] = 'A';c[1] = 'B';c[2] = 'C';
i[0] = 100;i[1] = 200;i[2] = 300;
System.out.println("str的長度為:" + str.length);
System.out.println("c[0] :" + c[0]);
System.out.println("i[1] :" + i[1]);
}
}
編譯後執行,可能會發現"str的長度為:"這行變成亂碼
這是因為CMD環境的編碼不一致
如果只想暫時性改變CMD環境編碼,可使用以下指令
chcp 950
※chcp = chang code page。950是繁體中文的號碼,utf-8則是65001。
此設定在關閉畫面之後就會恢復為預設值。
疑問:不知道為什麼,編譯時用utf-8編譯,CMD環境也設為utf-8,執行時中文卻還是顯示亂碼。非得設成繁體中文才行。(使用指令chcp 950)
如果想永久修改CMD環境編碼
1.Win+R,輸入regedit開啟登錄檔編輯器
2.找到 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor
3.右鍵新建一個字串值(S),取名叫Autorun,值設為@chcp 950>nul
建立Sample2_2.java
class Sample2_2 {
public static void main(String[] args) {
int i ;
System.out.println("i的值為:" + i);
int [] array = new int[5];
System.out.println("array[0]的值為:" + array[0]);
}
}
以上的程式碼由於i雖然被宣告了,但裡面沒有值所以會報錯。
把以下這行註解掉再試一次
//System.out.println("i的值為:" + i);
會發現array[0]雖然沒有指定值,但是自動被預設為0了。
這是因為在new一個陣列時,會先自動填入預設值。
建立Sample2_3.java檔案並寫入以下內容
class Sample2_3 {
public static void main(String[] args) {
int[][] array;
array = new int[3][4]; //陣列裡有三個物件,每個物件又內含四個物件。
array[0][0] = 100;
array[0][3] = 200;
System.out.println("array[0][0]的值:" + array[0][0]);
System.out.println("array[0][3]的值:" + array[0][3]);
}
}
依照下面的步驟將java檔編譯後執行,就跟之前做的一樣。
如果怕忘記或找不到指令,可以用記事本記起來。
cd C:\Users\userXXX\Desktop\java //移動到案件資料夾
javac -encoding utf-8 Sample2_3.java //編譯(使用utf-8以避免中文亂碼)
java Sample2_3 //執行
基本上多維陣列的概念就跟windows的資料夾一樣,
每個資料夾裡面都可能還有不定數量的資料夾或檔案。
再看一個範例:
class Sample2_4 {
public static void main(String[] args) {
/*
int[][] array = new int[3][]; //陣列裡有三個物件,每個物件裡的東西尚不指定。
array[0] = new int[3]; //指定array[0]裡面有三個存放int資料的空間
array[1] = new int[5]; //指定array[1]裡面有五個存放int資料的空間
array2] = new int[2]; //指定array[2]裡面有二個存放int資料的空間
*/
//創建陣列並賦值
int[][] array = {{10,20,30},{50,60,70,80,90},{100,200}};
System.out.println("array[0][0]的值:" + array[0][0]);
System.out.println("array[1][4]的值:" + array[1][4]);
}
}
這個範例說明了創建陣列時,不一定要一次把所有條件都指定好。 而且每個陣列的長度也可以不一樣。 可以先規定好陣列的大小後,一一賦值,也可以直接創立陣列並賦值。 本案例就用了/*和*/符號把一開始三行的程式碼註解掉。 直接創立陣列並賦值
JAVA利用java.util.ArrayList類實現了可變長的列表功能。
方才的陣列長度是固定不可變的,例如:
array = new int[3];
這行程式碼就確保了記憶體中,預留了3個保存int資料的空間。不能增加也不能減少。
但ArrayList類可以。
JAVA裡面有很多既有的工具類可使用,ArrayList類就是其中一種。要使用這些工具,需要先import。
像是把工具從倉庫拿到工作檯來一樣。
ArrayList的使用流程如下:
可以發現這邊賦值和取值的方式和陣列不一樣,
在JAVA的工具類中,每個類都有自己的使用方法,不會用的時候就用關鍵字google吧。
在新增一個ArrayList時,<>內只能存放物件,不能放int,double等基本資料型態。
像下面這行程式碼因為放了int就會報錯:
ArrayList<int> array = new ArrayList<int>();
為了解決這個問題,JAVA有提供一些物件來包覆基本資料型態如下表:
基本資料型態 | 對應的wrapper class |
---|---|
boolean | Boolean |
byte | Byte |
char | Character |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
利用get方法取出資料時,JAVA會自動檢查來源與目標的資料型態是否可以互換。
如果無法確認來源資料是什麼類型,就會在編譯時報錯。如下例:
ArrayList<int> array = new ArrayList<int>();
array.add(10);
int num = array.get(0);
由於無法確認array裡面會拿出什麼東西來,所以報錯,應修改成下面的樣子:
int num = (Integer)array.get(0);
利用()來指定資料型態,像是過海關一定要填申報單一樣。
新建ArrayList的時候,左右都要重複寫一次資料類型很麻煩,
所以在JAVA SE7版本之後,右邊的資料類型可以省略不寫。如下例:
ArrayList<int> array = new ArrayList<>();
在CMD畫面執行指令的時候,可以在指令後面給予引數,告訴電腦一些額外資訊。例如檔案路徑也是引數的一種。
https://imgur.com/UI0L2Vh
在執行「java」這個指令時,第一個引數會被當成要執行的路徑或檔案名稱,
第二個以後的引數則會被傳進執行的程式裡,保存在String[] args列表裡面。
我們可以在程式裡對這些引數做一些處理。處理完的結果就跟上圖一樣。
class Sample2_5 {
public static void main(String[] args) {
System.out.println(args[0]);
System.out.println(args[1]);
System.out.println(args[0] + args[1]);
}
}
※JAVA裡的引數預設被保存為String形式,如果要轉換成數字,可以使用以下方法
int num = Integer.parseInt(args[0]);
在CMD畫面裡有許多可以直接使用的指令,這些指令常常會需要搭配引數來使用。
我們也可以自己寫指令,就如同Sample2_5一樣,自己定義指令後面的各個引數該如何被使用。
以上 是第二章 陣列與列表的學習紀錄
下一章會講演算子與分歧文(if)
參考教材: JAVAプログラマSilver SE8 - 山本 道子